// 映射类型
type methods = 'get' | 'post' | 'put' | 'delete'
type request = {
    [key in methods]: string
}

const _request: request = {
    get: 'get',
    post: 'post',
    put: 'put',
    delete: 'delete'
}

// Partial<T>创建一个新类型，其中原类型的每个属性都是可选的
// interface Person {
//   id: number;
//   name: string;
// }
// type PartialPerson = Partial<Person>;
// PartialPerson的类型为 { id?: number, name?: string }

// Required（创建一个新类型，其中原类型的每个属性都是必需的）
// Required<T>
// interface Person {
//   id?: number;
//   name?: string;
// }
// type RequiredPerson = Required<Person>;
// PartialPerson的类型为 { id: number, name: string }

// Readonly（创建一个新类型，其中原类型的每个属性都变为只读）
// Readonly<T>
// interface Person {
//   id: number;
//   name: string;
// }
// type ReadonlyPerson = Readonly<Person>;
// PartialPerson的类型为 { readonly id: number, readonly name: string }

// Rick<T, K>
// Pick会返回一个新类型，新类型是由第一个泛型T中的，而K就是新类型的属性
interface Example {
    title: string
    content: string
    id: string
    count: number
}
// 我只想要 id 和 count
type Example2 = Pick<Example, 'id' | 'count'>
// Example2的类型为 { id: string, count: number }
